#!/usr/bin/python
# coding=UTF8

import _mysql
import time
import sys

from pycall.callfile import *
from pycall.callfileexceptions import *
def main():
	global verbose
	global db
	verbose = 1
	counter = 0
	db=_mysql.connect()
	db=_mysql.connect(host="localhost",user="root",passwd="",db="autodial")
	while True:
		try:
			# Счетчик +1 (считаем до 5)
			
			# Проверяем что в базе выставлен dialstatus в 1 иначе просто спим
			if  check_dial_status() == 0: 
				if verbose == 1 : print "Stop"
				time.sleep(5)
			else:
				if verbose == 1 : print "Start"
				### TODO проверить что запрос возвращает то что нужно, если ничего не возвратил то ошибка
				# Делаем запрос и получаем строки 
				db.query('SELECT * FROM numbers WHERE tried=0')
				res=db.store_result()
				rows = res.fetch_row(0)
				# Если строки есть
				if rows:
					# то берем каждую и присваиваем переменным соответсвующие значения полей
					for row in rows:
						nid		=	row[0]
						num		=	row[1]
						group	=	row[2]
						ballance=	row[3]
						tried	=	row[4]
						if verbose == 1: print "# %d - Try to generate a call to %s in group %s with ballance %s (ID=%s)" % (counter,num,group,ballance,nid)
						# Делаем звонок
						# createcall(nid,num,group,ballance)
						
						# и увеличиваем счетчик на 1
						counter = counter + 1
						# Количество одновременных звонков - 5
						if counter == 5:
							if verbose == 1 : print "Sleep..."
							time.sleep(5)
							counter = 0
				# Если запрос ничего не выдал, то спим
				else:
					if verbose == 1 : print "Nothing todo, sleep..."
					time.sleep(5)
					
		except (KeyboardInterrupt, SystemExit):
			sys.exit(0)
        	
			
def createcall(nid,num,group,ballance):
	callfile = CallFile(
		trunk_type = 'Local',
		trunk_name = 'gencall/n',
		number = num,
		callerid_num = '1111',
		context = 'gencall',
		extension = 's',
		priority = '1',
		wait_time = '600',
		archive = 'True',
		always_delete = 'True',
		user = 'asterisk', # chown the callfile to user 'asterisk'.
		sets = {
			'nid'		: nid,
			'num'		: num,
			'group' 	: group,
			'ballance'	: ballance
		}
	)

	# Place the call now.
	try:
		# Создаем call-файл
		callfile.run()
		# Выставляем в таблице numbers флаги обработки звонков
		db.query('UPDATE numbers set tried=1 where number=(%s)' % num)
	except NoActionDefined:
		if verbose == 1 : print "NoActionDefined exception"
	except NoUserException:
		if verbose == 1 : print "User %s doesn't exist. Skipping call." % callfile.user
	except NoPermissionException:
		if verbose == 1 : 
			print "We do not have the permissions to change ownership of the callfile to user %s. SKipping the call." % callfile.user


def check_dial_status():
	db.query('SELECT * FROM control WHERE id=100')
	r=db.use_result()
	try:
		status = int(r.fetch_row(0)[0][1])
	except:
		status = 0
		if verbose == 1 : print "INT function exception"
	return status
		
if __name__ == '__main__':
	main()
